package pe.gob.foncodes.ssa.web.controller;

import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import pe.gob.foncodes.ssa.bs.administracion.controller.GenericMaintenanceController;
import pe.gob.foncodes.ssa.bs.common.util.Constante;
import pe.gob.foncodes.ssa.bs.common.util.DateHelper;
import pe.gob.foncodes.ssa.bs.seguridad.domain.ControlAcceso;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Usuario;

/**
 *
 * @author aespinoza
 */
public class ControlAccesoController extends GenericMaintenanceController {
    
    protected static Logger log = Logger.getLogger(ControlAccesoController.class);
    private Date ultimoIngreso;
    private int intentosValidos;
    private int intentosRechazados;

    public void load() throws Exception {
        Date fechUltimoIngresoExitoso = new Date();
        setBeanBusqueda(new Usuario());
        Usuario usuario = (Usuario) getSpringBean(Constante.SESSION_USER);
        List<ControlAcceso> listTmp = null;
        listTmp = getService().findByNamedQuery("ControlAcceso.findByNidUsuarioAndTipOperacion", new Object[]{Constante.ACCESO_TIPO_INGRESO, usuario.getId()});
        fechUltimoIngresoExitoso = ultimoIngreso(listTmp, Constante.INTENTO_VALIDO);
        int fails = 0;
        int oks = 0;

        for (int i = 0; i <= (listTmp.size() - 1); i++) {
            if (DateHelper.fechasDiferenciaEnDias(fechUltimoIngresoExitoso, listTmp.get(i).getFecRegistro()) <= 0) {
                if (listTmp.get(i).getFlgAcceso().equals(Constante.INTENTO_VALIDO)) {
                    oks++;
                } else {
                    if (listTmp.get(i).getFlgAcceso().equals(Constante.INTENTO_RECHAZADO)) {
                        fails++;
                    }
                }
            }
        }
        setIntentosRechazados(fails);
        setIntentosValidos(oks);
        setUltimoIngreso(ultimoIngreso(listTmp, Constante.INTENTO_VALIDO));
    }

    public static Date ultimoIngreso(List<ControlAcceso> tempo, String tipoIntento) {
        Date ultimo = Constante.FECHA_INICIO;
        Date fecha_bd;
        String st;

        for (int i = 0; i <= (tempo.size() - 1); i++) {
            fecha_bd = tempo.get(i).getFecRegistro();
            st = tempo.get(i).getFlgAcceso();
            if ((DateHelper.fechasDiferenciaEnDias(ultimo, fecha_bd) <= 0) && st.equals(tipoIntento)) {
                ultimo = fecha_bd;
            }
        }
        return ultimo;
    }

    public int getIntentosRechazados() {
        return intentosRechazados;
    }

    public void setIntentosRechazados(int intentosRechazados) {
        this.intentosRechazados = intentosRechazados;
    }

    public int getIntentosValidos() {
        return intentosValidos;
    }

    public void setIntentosValidos(int intentosValidos) {
        this.intentosValidos = intentosValidos;
    }

    public Date getUltimoIngreso() {
        return ultimoIngreso;
    }

    public void setUltimoIngreso(Date ultimoIngreso) {
        this.ultimoIngreso = ultimoIngreso;
    }
    
}
